home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs29.d81 / sidst2.arc / ENH SID FORMAT.T < prev    next >
Text File  |  2009-10-10  |  16KB  |  293 lines

  1.  *****************************************************************************
  2.  *                      ╙╔─╨╠┴┘┼╥ ═╒╙╔├ ╞╔╠┼ ├╧╬╘┼╬╘╙                        *
  3.  *                    ╔NCLUDING ┼NHANCED ┼DITOR ├OMMANDS                     *
  4.  *                            ┬Y ─ICK ╘HORNTON                               *
  5.  *****************************************************************************
  6.  
  7.  ╙╔─╨╠┴┘┼╥ MUSIC FILES ARE ╨╥╟ TYPE FILES WHICH CONTAIN THE MUSICAL NOTES AND
  8.  COMMAND DIRECTIVES FOR PLAYING A SONG, AS WELL AS THE SEVERAL TEXT LINES
  9.  INTENDED FOR THE SONG NAME AND CREDIT LINES FOR THE COMPOSER AND ╙╔─
  10.  ARRANGER.
  11.  
  12.  ╧N DISK, THE FILE CONSISTS OF ONE OR MORE SECTORS WRITTEN IN STANDARD ╨╥╟
  13.  FORMAT. ├HARACTERISTICS OF THIS FILE TYPE CAN BE FOUND IN YOUR DISK MANUAL, OR
  14.  OTHER BOOKS ON DISK FILE MANAGEMENT. ╞ROM HERE ON, WE WILL CONSIDER THE FILE
  15.  DATA AS IT RESIDES IN MEMORY AFTER BEING ╠╧┴─'ED. ╘HE GENERAL FORMAT OF THE
  16.  .═╒╙ FILE IN MEMORY IS:
  17.  
  18.     (1) ╘WO-BYTE LENGTH OF VOICE 1 IN LOW-BYTE, HIGH-BYTE FORM.
  19.     (2) ╘WO-BYTE LENGTH OF VOICE 2 IN LOW-BYTE, HIGH-BYTE FORM.
  20.     (3) ╘WO-BYTE LENGTH OF VOICE 3 IN LOW-BYTE, HIGH-BYTE FORM.
  21.     (4) ╘HE DATA FOR VOICE 1 ALWAYS ENDING WITH A ╚╠╘ COMMAND.
  22.     (5) ╘HE DATA FOR VOICE 2 ALWAYS ENDING WITH A ╚╠╘ COMMAND.
  23.     (6) ╘HE DATA FOR VOICE 3 ALWAYS ENDING WITH A ╚╠╘ COMMAND.
  24.     (7) ╘HE TEXT LINES FOR SONG NAME, ETC. ╘HERE ARE FIVE LINES, EACH
  25.         CONTAINING 0-32 BYTES AND ENDING WITH A CARRIAGE RETURN. ╘HE TEXT DATA
  26.         INFORMATION IS IN UPPER-CASE ├OMMODORE ╨ET ┴╙├╔╔. ┴ HEX ZERO BYTE
  27.         FOLLOWS THE LAST BYTE OF THE LAST LINE OF TEXT.
  28.  
  29.  ╘HE EFFECT OF THIS IS THAT EACH .═╒╙ FILE IS ACTUALLY FOUR FILES PACKED END-
  30.  TO-END IN A SINGLE ╨╥╟ FILE WITH THREE LITTLE TWO-BYTE LENGTHS IN THE FRONT TO
  31.  HELP YOU FIND THINGS. ╓OICE 1 BEGINS AT THE SIXTH BYTE OF THE DATA FILE AS
  32.  ╠╧┴─'ED INTO MEMORY. ╓OICE 2 STARTS AT A POINT 6 + LENGTH OF VOICE 1 FROM THE
  33.  BEGINNING OF THE FILE IN MEMORY. ╓OICE 3 IS AT 6 + LENGTH OF VOICE 1 + LENGTH
  34.  OF VOICE 2 FROM THE FILE START, AND THE TEXT LINES BEGIN AT 6 + LENGTH OF
  35.  VOICE 1 + LENGTH OF VOICE 2 + LENGTH OF VOICE 3. ┼ACH VOICE ENDS WITH A ╚╠╘
  36.  COMMAND (HEX 014╞), AND IF THERE IS NO DATA FOR A VOICE THAT IS ALL IT WILL
  37.  CONTAIN. ╘HE TEXT AREA ENDS WITH A HEX ZERO AFTER THE CARRIAGE RETURN FOR THE
  38.  FINAL LINE.
  39.  
  40.  ┼ACH VOICE CONTAINS DATA IN TWO-BYTE PAIRS THAT CONTAIN THE MUSICAL NOTES AND
  41.  COMMANDS NEEDED TO PLAY THE SONG. ╘HE FIRST BYTE OF EACH PAIR WILL HAVE BITS 1
  42.  AND 0 BOTH SET TO ZERO IF THE BYTE-PAIR DESCRIBES A MUSICAL NOTE, OTHERWISE
  43.  THE BYTE-PAIR DESCRIBES A ╙╔─ CHIP COMMAND OR ╙╔─╨╠┴┘┼╥ COMMAND.
  44.  
  45.  ╔N THE FOLLOWING, COMMANDS ARE IDENTIFIED BY THE THREE CHARACTER ABBREVIATION
  46.  USED BY THE ╙╔─ ┼─╔╘╧╥ PROGRAM DESCRIBED IN THE BOOKS "┴LL ┴BOUT THE ├OMMODORE
  47.  64" ╓OLUME 2, AND "├╧═╨╒╘┼!'S ═USIC ╙YSTEM FOR THE ├OMMODORE 128 AND 64". ┬OTH
  48.  BOOKS ARE PUBLISHED BY ├╧═╨╒╘┼! ┬OOKS.
  49.  
  50.  *****************************************************************************
  51.  *                          ═╒╙╔├┴╠ ╬╧╘┼ ─┴╘┴ ╨┴╔╥╙                          *
  52.  *****************************************************************************
  53.  
  54.  ═USICAL NOTE DATA PAIRS WILL CONTAIN 00 IN THE LOWER-ORDER TWO BITS OF THE
  55.  FIRST BYTE OF THE PAIR. ┼ACH MUSICAL NOTE BYTE-PAIR CONTAINS DURATION IN ITS
  56.  FIRST BYTE, AND FREQUENCY (PITCH) IN THE SECOND. ╘HIS DATA IS CODED AS
  57.  FOLLOWS, WHERE DECODING PROCEEDS DOWNWARD UNTIL A > TERMINATOR IS FOUND. ┴ DOT
  58.  MEANS THE BIT CAN BE EITHER 0 OR 1:
  59.  
  60.  *****************************************************************************
  61.  *                         ┬┘╘┼ 1 - ╘╔┼ ┴╬─ ─╒╥┴╘╔╧╬                         *
  62.  *****************************************************************************
  63.  
  64.      ┬╔╘╙
  65.    7654 3210   ─┼╙├╥╔╨╘╔╧╬                    ----------------------------
  66.    0000 0000   ┴BSOLUTE ╨ITCH>                !          ┼╪┴═╨╠┼         !
  67.    .1.. ..00   ╘IE/╙LUR                       !                          !
  68.    1.10 0000   ╘RIPLET 64TH NOTE>             ! ╟╔╓┼╬ BYTE 1 = HEX ╞0    !
  69.    ..10 0100   ╒TILITY ╓OICE>                 !    (BINARY 1111 0000)    !
  70.    1.0. ..00   ╘RIPLET                        ! TIE        .1.. ..00     !
  71.    ..00 0100   ╒TILITY ─URATION>              ! DOTTED     ..1. ....     !
  72.    ...0 0000   64TH NOTE>                     ! DBL-DOT    1.1. ....     !
  73.    0.1. ..00   ╙INGLE ─OTTED DURATION         ! QTR NOTE>  ...1 0000     !
  74.    1.1. ..00   ─OUBLE ─OTTED DURATION         !                          !
  75.    ...0 1000   ╫HOLE NOTE>                    ! ╘HIS IS A DOUBLE-DOTTED  !
  76.    ...0 1100   ╚ALF ╬OTE>                     ! QUARTER NOTE WITH TIE.   !
  77.    ...1 0000   ╤UARTER ╬OTE>                  ----------------------------
  78.    ...1 0100   ┼IGHTH ╬OTE>
  79.    ...1 1000   ╙IXTEENTH ╬OTE>
  80.    ...1 1100   ╘HIRTY-╙ECOND ╬OTE>
  81.  
  82.  *****************************************************************************
  83.  *                    ┬┘╘┼ 2 - ╞╥┼╤╒┼╬├┘ (╨╔╘├╚) ┴╬─ ╥┼╙╘╙                   *
  84.  *****************************************************************************
  85.  
  86.    7654 3210   ─┼╙├╥╔╨╘╔╧╬                    ----------------------------
  87.                                               !                          !
  88.                ┬ITS 7 6    ═ODIFIER           !          ┼╪┴═╨╠┼         !
  89.    11.. ....     ╞LATTED                      !                          !
  90.    10.. ....     ╬ATURAL                      ! ╟╔╓┼╬ BYTE 2 IS HEX 94   !
  91.    01.. ....     ╙HARPED                      !       (BINARY 1001 0100) !
  92.    00.. ....     ─OUBLE SHARP (╟╞─├)          !                          !
  93.               OR ─OUBLE FLAT (┴┬┼)            !                          !
  94.                                               ! ╬ATURAL       10.. ....  !
  95.                ┬ITS 5 4 3  ╧CTAVE             ! ╧CTAVE 5      ..01 0...  !
  96.    ..11 1...     ╧CTAVE 0                     ! ╞ ╬OTE>       .... .100  !
  97.    ..11 0...     ╧CTAVE 1                     ----------------------------
  98.    ..10 1...     ╧CTAVE 2
  99.    ..10 0...     ╧CTAVE 3
  100.    ..01 1...     ╧CTAVE 4
  101.    ..01 0...     ╧CTAVE 5
  102.    ..00 1...     ╧CTAVE 6
  103.    ..00 0...     ╧CTAVE 7
  104.  
  105.                ┬ITS 2 1 0  ╬OTE
  106.    .... .111     ┬ ╬OTE>
  107.    .... .110     ┴ ╬OTE>
  108.    .... .101     ╟ ╬OTE>
  109.    .... .100     ╞ ╬OTE>
  110.    .... .011     ┼ ╬OTE>
  111.    .... .010     ─ ╬OTE>
  112.    .... .001     ├ ╬OTE>
  113.    .... .000     ╥EST>
  114.  
  115.  *****************************************************************************
  116.  *                             ├╧══┴╬─ ─┴╘┴ ╨┴╔╥╙                            *
  117.  *****************************************************************************
  118.  
  119.  ├OMMANDS CONTAIN INFORMATION OTHER THAN MUSICAL NOTE PITCH AND DURATION. ╞OR
  120.  COMMANDS, THE LOW-ORDER TWO BITS OF THE FIRST BYTE ARE NOT 00. ┴ WHOLE SET OF
  121.  COMMANDS ARE IDENTIFIED WITH A FIRST BYTE VALUE OF HEX 01. ╞OR THESE COMMANDS,
  122.  THE LOW-ORDER FOUR BITS OF THE SECOND BYTE CAN BE USED AS A GROSS IDENTIFIER,
  123.  WHILE THE HIGH ORDER FOUR BITS OFTEN CONTAIN A NUMERIC VALUE. ╘HESE COMMANDS
  124.  ARE DESCRIBED BY THEIR SECOND BYTES BELOW:
  125.  
  126.  *****************************************************************************
  127.  *                      ├╧══┴╬─╙ ╫╔╘╚ ╞╔╥╙╘ ┬┘╘┼ = ╚┼╪ 01                    *
  128.  *****************************************************************************
  129.  
  130.    * ┬┘╘┼2 *   ╚┼╪   ├╧══┴╬─   ╓┴╠╒┼
  131.    7654 3210         ╬┴═┼
  132.    NNNN 0000   N0    ─├┘       ┬ITS 7654 CONTAIN A VALUE, 0-╞
  133.    NNNN N001         ╥╒╨       ┬ITS 76543 CONTAIN A VALUE, 0-1╞
  134.    NNNN 0010   N2    ├┴╠       ┬ITS 7654 CONTAIN A VALUE, 0-╞
  135.    0000 0011   03    ┬═╨       ╒╨
  136.    0001 0011   13    ╞╠╘       ╬╧
  137.    0010 0011   23    ╥╬╟       ╬╧
  138.    0011 0011   33    ╙╬├       ╬╧
  139.    0100 0011   43    ╞-╪       ╬╧
  140.    1NNN 0011   N3    ─┼╞       ┬ITS 7654 CONTAIN A VALUE, 9-╞, WHICH IS 8
  141.                                LESS THAN THE TRUE VALUE.
  142.    0NNN N100         ┴╘╦       ┬ITS 6543 CONTAIN A VALUE, 0-╞
  143.    1NNN N100         ╙╒╙       ┬ITS 6543 CONTAIN A VALUE, 0-╞
  144.    0110 0011   63    ╠╞╧       0
  145.    0111 0011   73    ╨&╓       ╬╧
  146.    NNNN N101         ╥─╬       ┬ITS 76543 CONTAIN A VALUE, 0-1╞
  147.    NNNN 0110   N6    ─┼╞       ┬ITS 7654 CONTAIN A VALUE, 0-╞
  148.    NNN0 0111   N7    ╫┴╓       ┬ITS 7 6 5  ╫┴╓┼╞╧╥═
  149.                                     0 0 0  ╬OISE
  150.                                     0 0 1  ╘RIANGLE
  151.                                     0 1 0  ╙AWTOOTH
  152.                                     0 1 1  ╘RIANGLE + ╙AWTOOTH
  153.                                     1 0 0  ╨ULSE
  154.                                     1 0 1  ╨ULSE + ╘RIANGLE
  155.                                     1 1 0  ╨ULSE + ╙AWTOOTH
  156.                                     1 1 1  ╨ULSE + ╘RIANGLE + ╙AWTOOTH
  157.    NNN1 0111   N7    ╞-═       ┬ITS 7 6 5  ╞╔╠╘┼╥ ═╧─┼
  158.                                     0 0 0  ╧FF (╬)
  159.                                     0 0 1  ╠OW ╨ASS
  160.                                     0 1 0  ┬AND ╨ASS
  161.                                     0 1 1  ╠OW + ┬AND
  162.                                     1 0 0  ╚IGH ╨ASS
  163.                                     1 0 1  ╚IGH + ╠OW
  164.                                     1 1 0  ╚IGH + ┬AND
  165.                                     1 1 1  ╚IGH + ┬AND + ╠OW
  166.    NNNN 1000   N8    ╥╠╙       ┬ITS 7654 CONTAIN A VALUE, 0-╞
  167.    NNNN 1010   N┴    ╥┼╙       ┬ITS 7654 CONTAIN A VALUE, 0-╞
  168.    0000 1011   0┬    ┬═╨       ─╬ (─OWN)
  169.    0001 1011   1┬    ╞╠╘       ┘┼╙
  170.    0010 1011   2┬    ╥╬╟       ┘┼╙
  171.    0011 1011   3┬    ╙╬├       ┘┼╙
  172.    0100 1011   4┬    ╞-╪       ┘┼╙
  173.    0101 1011   5┬    3-╧       ┘┼╙
  174.    0110 1011   6┬    ╠╞╧       1
  175.    0111 1011   7┬    ╨&╓       ┘┼╙
  176.    1NNN 1011   N┬    ├┴╠       ┬ITS 7654 CONTAIN A VALUE, 9-╞, WHICH IS 8 LESS
  177.                                THAN THE TRUE VALUE.
  178.    NNNN 1110   N┼    ╓╧╠       ┬ITS 7654 CONTAIN A VALUE, 0-╞
  179.    0000 1111   0╞    ╘┴╠       ╬/┴
  180.    0010 1111   2╞    ┼╬─       ╬/┴
  181.    0100 1111   4╞    ╚╠╘       ╬/┴
  182.    0NN1 1111   N╞    ╙╥├       ┬ITS 65 CONTAIN A VALUE, 0-2
  183.    1NNN 1111   N╞    ─╙╘       ┬ITS 654 CONTAIN A CODED VALUE:
  184.                                000=0, 010=1, 101=2, 110=3
  185.  
  186.  *****************************************************************************
  187.  *                   ├╧══┴╬─╙ ╫╚╧╙┼ ╞╔╥╙╘ ┬┘╘┼ ╔╙ ╬╧╘ ╚┼╪ 01                 *
  188.  *****************************************************************************
  189.  
  190.  ╘HIS GROUP OF COMMAND PAIRS GENERALLY HAS A FIRST BYTE THAT DEFINES THE
  191.  COMMAND, AND THE SECOND BYTE GIVES A NUMERIC VALUE FROM HEX 00 TO ╞╞ (DECIMAL
  192.  RANGE 0 TO 255). ╘HERE ARE A FEW VARIATIONS, HOWEVER, WHERE THE VALUE RANGE
  193.  EXCEEDS 255 (─╘╬, ╨-╫, ═╙#, ╩╔╞, ╨╧╥), AND WHERE NEGATIVE VALUES MUST BE
  194.  AVAILABLE (┴╒╘, ╨-╙, ╘╨╙, ╞-╙, ╙├┴, ╥╘╨, ╩╔╞, AND ─╘╬).
  195.  
  196.    ┬┘╘┼1    * ┬┘╘┼2 *     ├═─
  197.     ╚┼╪     7654 3210     ╬┴═┼    ╓┴╠╒┼
  198.  
  199.      N2     NNNN NNNN     ╨-╫     ╘HE 12-BIT NUMBER COMPOSED OF BYTE 1, BITS
  200.                                   7-4, AND ALL 8 BITS OF BYTE 2 GIVE A RANGE
  201.                                   OF 0-4095.
  202.  
  203.      06     NNNN NNNN     ╘┼═     ╔F THE SECOND BYTE IS ZERO, IT IS REPLACED
  204.                                   BY 256 (HEX 100). ╘HE SECOND BYTE VALUE IS
  205.                                   THEN DIVIDED INTO 14,400. ╘HE WHOLE NUMBER
  206.                                   QUOTIENT IS THE NUMBER OF QUARTER NOTES
  207.                                   PER MINUTE.
  208.  
  209.      16     NNNN NNNN     ╒╘╠     ╙ECOND BYTE IS THE VALUE.
  210.  
  211.      26     NNNN NNNN     ╨╬╘     ╙ECOND BYTE IS THE VALUE.
  212.  
  213.      36     NNNN NNNN     ╚┼─     ╙ECOND BYTE IS THE VALUE.
  214.  
  215.      46     NNNN NNNN     ╞╠╟     ╙ECOND BYTE IS THE VALUE.
  216.  
  217.      56     SNNN NNNN     ╨-╙     ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
  218.                                   NUMBER WITH RANGE -128 (HEX 80) TO +127
  219.                                   (HEX 7╞).
  220.  
  221.      66     SNNN NNNN     ╞-╙     ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
  222.                                   NUMBER WITH RANGE -128 (HEX 80) TO +127
  223.                                   (HEX 7╞).
  224.  
  225.      6┼     SNNN NNNN     ╙├┴     ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
  226.                                   NUMBER WITH RANGE -7 (HEX ╞9) TO 7 (HEX 07).
  227.  
  228.      76     0NNN NNNN     ╓─╨     ┬YTE 2 BITS 6-0 CONTAIN THE VALUE, 0-127.
  229.  
  230.      86     NNNN NNNN     ╓╥╘     ╙ECOND BYTE IS THE VALUE.
  231.  
  232.      96     SNNN NNNN     ┴╒╘     ╙ECOND BYTE CONTAINS THE VALUE AS A SIGNED
  233.                                   NUMBER WITH RANGE -128 (HEX 80) TO +127
  234.                                   (HEX 7╞).
  235.  
  236.      ┴6     HHHH OOOS     ╘╨╙     ╘HE SECOND BYTE CONTAINS THE NUMBER OF HALF-
  237.                                   STEPS TO TRANSPOSE, FROM -95 TO +95. ┬IT 0
  238.                                   IS THE SIGN, 0=+, 1=-. ┬ITS 3-1 GIVE THE
  239.                                   NUMBER OF WHOLE OCTAVES FOR NEGATIVE VALUES.
  240.                                   ╞OR POSITIVE NUMBERS, THE NUMBER OF OCTAVES
  241.                                   IS 7 MINUS THE NUMBER IN BITS 3-1. ┬ITS 7-4
  242.                                   GIVE THE ADDITIONAL HALF-STEPS LESS THAN AN
  243.                                   OCTAVE (0-11) FOR POSITIVE NUMBERS. ╞OR
  244.                                   NEGATIVE NUMBERS, THE EXCESS HALF-STEPS ARE
  245.                                   11 MINUS THE NUMBER IN BITS 7-4.
  246.  
  247.      ┬6     NNNN NNNN     ┴╒╪     ╙ECOND BYTE IS THE VALUE.
  248.  
  249.      ├6     NNNN NNNN     ╨╓─     ╙ECOND BYTE HAS VALUE, 0-127.
  250.  
  251.      ─6     NNNN NNNN     ╨╓╥     ╙ECOND BYTE HAS VALUE, 0-127.
  252.  
  253.      ┼6     NNNN NNNN     ═┴╪     ╙ECOND BYTE HAS VALUE, 0-255.
  254.  
  255.      ╞6     NNNN NNNN     ╒╘╓     ╙ECOND BYTE HAS VALUE, 0-255.
  256.  
  257.      0┼     NNNN NNNN     ╞-├     ╙ECOND BYTE IS THE VALUE.
  258.  
  259.      2┼     NNNN NNNN     ╥╘╨     ╙ECOND BYTE HAS THE NUMBER OF HALF-STEPS TO
  260.                                   ADJUST, -47 TO +47 WHERE 3 MINUS THE NUMBER
  261.                                   GIVEN BY BITS 210 GIVE THE NUMBER OF WHOLE
  262.                                   OCTAVES, AND BITS 76543 MINUS 11 IS THE
  263.                                   NUMBER OF ADDITIONAL HALF-STEPS LESS THAN
  264.                                   AN OCTAVE.
  265.  
  266.      4┼     NNNN NNNN     ╚╠─     ╙ECOND BYTE HAS A VALUE, 0-255.
  267.  
  268.      N┼     NNNN NNNN     ═╙#     ╘HE 10-BIT NUMBER COMPOSED OF BITS 7-6 OF
  269.                                   THE 1ST BYTE AND ALL 8 BITS OF THE SECOND
  270.                                   BYTE GIVE A VALUE OF 0-1023. ┬ITS 5 AND 4
  271.                                   ARE ALWAYS 01 FOR THIS COMMAND, SO THE FIRST
  272.                                   BYTE MAY BE 1┼, 5┼, 9┼, OR ─┼.
  273.  
  274.      N┼     NNNN NNNN     ╩╔╞     ┬ITS 76 OF THE FIRST BYTE ARE APPENDED TO
  275.                                   THE 8 BITS OF THE SECOND BYTE TO FORM A
  276.                                   10-BIT VALUE WITH A RANGE OF -200 TO 757.
  277.                                   ┬YTE 1 BITS 54 ARE ALWAYS 11, SO THE FIRST
  278.                                   BYTE MAY BE 3┼, 7┼, ┬┼, OR ╞┼.
  279.  
  280.      N┴     NNNN NNNN     ─╘╬     ╘HE 11-BIT NUMBER COMPOSED OF BYTE 1, BITS
  281.                                   7-5 AND ALL 8 BITS OF BYTE 2 PRODUCES A
  282.                                   VALUE OF 0-2047. ╔F BYTE 1, BIT 4 IS 1, THE
  283.                                   NUMBER IS NEGATIVE, AND IS REDUCED BY 2048
  284.                                   FOR AN EFFECTIVE RANGE OF -2048 TO 2047.
  285.  
  286.      NN     NNNN NNNN     ╨╧╥     ╘HE 14-BIT NUMBER COMPOSED OF BYTE 1, BITS
  287.                                   7-2 AND ALL 8 BITS OF THE SECOND BYTE. ╓ALUE
  288.                                   RANGE IS 16383. ┬ITS 1 AND 0 OF BYTE 1 ARE
  289.                                   ALWAYS 11 FOR THIS COMMAND, ALL OTHER BITS
  290.                                   MAY BE ANY VALUE.
  291.  
  292.   
  293.